package com.flower8.service;

import com.flower8.dto.UserCancelationApplicationDto;
import com.flower8.dto.UserCreditPointDto;
import com.flower8.dto.UserDto;
import com.flower8.dto.UserPointsDto;
import com.flower8.model.User;
import com.flower8.utils.PageData;

import java.util.List;
import java.util.Map;

/**
 * @Description: 用户管理service接口
 * @Author: tanglin
 * @Date: 2019/09/09 17:23
 * @Version: 1.0
 */
public interface UserService {
    /**
     * 获取用户列表
     * @param pd
     * @return
     */
    List<UserDto> getUserList(PageData pd);

    /**
     * 获取用户数量
     * @param pd
     * @return
     */
    int getUserListCount(PageData pd);

    /**
     * 根据用户id查询用户信息
     * @param id
     * @return
     */
    UserDto getUserById(long id);

    /**
     * 根据用户id删除用户
     * @param id
     * @throws Exception
     */
    void deleteById(long id) throws Exception;

    /**
     * 根据用户id更新用用户信息
     * @param user
     * @throws Exception
     */
    void updateUserById(User user) throws Exception;

    /**
     * 查询用户积分记录
     * @param pd
     * @return
     * @throws Exception
     */
    List<UserPointsDto> getUserPoints(PageData pd)throws Exception;

    /**
     * 查询用户积分记录总数
     * @param pd
     * @return
     * @throws Exception
     */
    int getUserPointsCount(PageData pd)throws Exception;

    /**
     * 查询用户总积分
     * @param pd
     * @return
     */
    int getTotPointByUser(PageData pd);

    /**
     * 查询用户信用分记录
     * @param pd
     * @return
     * @throws Exception
     */
    List<UserCreditPointDto> getUserCreditPoints(PageData pd)throws Exception;

    /**
     * 查询用户信用分记录总数
     * @param pd
     * @return
     * @throws Exception
     */
    int getUserCreditPointsCount(PageData pd)throws Exception;

    /**
     * 查询用户总信用分
     * @param pd
     * @return
     */
    int getTotalCreditPoint(PageData pd);

    /**
     * 查询需要人工审核的用户
     * @param pd
     * @return
     * @throws Exception
     */
    List<UserDto> getNotPassUser(PageData pd)throws Exception;

    /**
     * 查询需要人工审核的用户总数
     * @param pd
     * @return
     * @throws Exception
     */
    long getNotPassUserCount(PageData pd)throws Exception;

    /**
     * 审核用户实名认证信息
     * @param pd
     * @throws Exception
     */
    void checkUser(PageData pd) throws Exception;

    /**
     * 获取用户注销申请列表
     * @param pd
     * @return
     */
    List<UserCancelationApplicationDto> getUserCancelationApplicationList(PageData pd) throws Exception;

    /**
     * 获取用户注销申请数量
     * @param pd
     * @return
     */
    int getUserCancelationApplicationListCount(PageData pd) throws Exception;

    /**
     * 受理用户注销申请
     * @param id
     * @throws Exception
     */
    void acceptCancelationApplication(long id) throws Exception;

    /**
     * 驳回用户注销申请
     * @param id
     * @throws Exception
     */
    void rejectCancelationApplication(long id) throws Exception;

    /**
     * 查询用户总可用额度
     * @param pd
     * @return
     */
    Map getTotalUsableAmt(PageData pd) throws Exception;

    /**
     * 查询用户可用额度记录
     * @param pd
     * @return
     * @throws Exception
     */
    List<Map> getUserUsableAmtList(PageData pd) throws Exception;

    /**
     * 查询用户可用额度记录总数
     * @param pd
     * @return
     * @throws Exception
     */
    int getUserUsableAmtCount(PageData pd)throws Exception;
}
